<!--
 * @Author: hucc
 * @Date: 2021-09-29 09:36:06
 * @LastEditors: hucc
 * @LastEditTime: 2021-10-06 16:15:10
 * @Description: 
-->
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="./jquery.js"></script>
    <script>
        //等页面加载完毕执行js代码
        window.onload = function() {
            const baseURL = "http://39.103.202.53:8888"
                //工厂模式
            function getPromise(url, method) {
                return new Promise(function(resolve, reject) {
                    $.ajax({
                        url: baseURL + url,
                        method,
                        success(res) {
                            //请求成功 调用resolve()方法
                            resolve(res);
                        },
                        //请求失败 调用reject()方法
                        error(res) {
                            reject(res);
                        }
                    })
                })
            }
            //通过工厂函数获取promise实例
            let pro1 = getPromise("/index/category/findAll", "get");
            let pro2 = getPromise("/index/carousel/findAll", "get");
            //Promise.all([pro1,pro2]) pro1和pro2都成功才成功 有一个失败就失败
            let pro3 = Promise.all([pro1, pro2]);
            //Promise.race([pro1,pro2])，谁先执行完就返回它的结果(无论成功或者失败)
            let pro4 = Promise.race([pro1, pro2]);
            //Promise.any([pro1,pro2]),pro1,pro2都失败才失败，有一个成功就成功,返回成功的结果
            let pro5 = Promise.any([pro1, pro2]);
            //通过promise实例方法 访问内部的状态
            // pro5.then((res) => {
            //         console.log(res);
            //     }).catch((err) => {
            //         console.log(err);
            //     }).finally(() => {
            //         //finally()不论成功还是失败都会被捕获执行 没有参数
            //         console.log("finally");
            //     })
            //     //通过promise实例方法 访问内部的状态
            // pro4.then((res) => {
            //         console.log(res.data[0]);
            //     }).catch((err) => {
            //         console.log(err);
            //     }).finally(() => {
            //         //finally()不论成功还是失败都会被捕获执行 没有参数
            //         console.log("finally");
            //     })
            //通过promise实例方法 访问内部的状态
            // pro3.then((res) => {
            //         console.log(res);
            //     }).catch((err) => {
            //         console.log(err);
            //     }).finally(() => {
            //         //finally()不论成功还是失败都会被捕获执行 没有参数
            //         console.log("finally");
            //     })
            //通过promise实例方法 访问内部的状态
            pro1.then((res) => {
                console.log(res);
            }).catch((err) => {
                console.log(err);
            }).finally(() => {
                //finally()不论成功还是失败都会被捕获执行 没有参数
                console.log("finally");
            })
            let obj1 = {
                name: 'zs',
                age: 12,
                gender: 'male'
            }
            let obj2 = {
                    status: 500,
                    message: "操作失败",
                    data: null,
                    timestamp: new Date().getTime()
                }
                //Promise.resolve() 参数任意 返回状态为fulfilled 的promise对象
            console.log(Promise.resolve(obj1)); //Promise { <state>: "fulfilled", <value>: {…} }
            let pro6 = Promise.resolve(obj1);
            pro6.then(res => {
                    console.log(res);
                })
                //Promise.reject() 参数任意 返回状态为rejected 的promise对象
            console.log(Promise.reject(obj2)); //Promise { <state>: "rejected", <reason>: {…} }
            let pro7 = Promise.reject(obj2);
            pro7.catch(err => {
                console.log(err);
            })
        }
    </script>
</head>

<body>

</body>

</html>